package com.jms.web.mvc.creator;

import com.jms.framework.beans.annotation.Component;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.lang.reflect.Parameter;

/**
 * 请求响应参数创建器类
 * 用于创建Servlet相关的请求、响应和会话对象参数
 */
@Component
public class RequestResponseArgumentCreator extends ArgumentCreator {
    /**
     * 构造函数，初始化参数创建器的优先级
     * 优先级设置为10002
     */
    public RequestResponseArgumentCreator() {
        super(10002);
    }

    /**
     * 创建参数对象的方法
     * 根据参数类型创建对应的Servlet相关对象
     *
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param parameter 方法参数信息
     * @return 创建的参数对象，如果无法创建则返回null
     */
    @Override
    public Object create(HttpServletRequest request, HttpServletResponse response, Parameter parameter, Object handler) {
        // 根据参数类型匹配并返回相应的对象
        Class<?> parameterType = parameter.getType();
        if (ServletRequest.class.isAssignableFrom(parameterType)) {
            return request;
        } else if (ServletResponse.class.isAssignableFrom(parameterType)) {
            return response;
        } else if (HttpSession.class.isAssignableFrom(parameterType)) {
            return request.getSession();
        }
        return null;
    }
}

